package localhost.mb;

import java.text.NumberFormat;
import java.util.Date;
import java.util.List;

import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import localhost.ejb.DaoOrcamento;
import localhost.model.Conta;
import localhost.view.MessageBean;
import localhost.view.PageTransitionBean;
import localhost.view.ViewConta;

@ManagedBean(name = "mbConta")
@SessionScoped
public class MbConta {

	@EJB
	DaoOrcamento daoOrca;

	private ViewConta tela = new ViewConta();
	PageTransitionBean pt = new PageTransitionBean();
	MessageBean mb = new MessageBean();
	MetodosComuns mc = new MetodosComuns();
	FacesContext fc = FacesContext.getCurrentInstance();

	Date dataAlteracao = new Date();
	NumberFormat formatoMoeda = NumberFormat.getCurrencyInstance();
	
	public void novaConta(){
		Conta conta = this.tela.getConta();
		try {
			daoOrca.salvar(conta);
			this.tela.setConta(new Conta());
			msgRetornoGeral("frmIndex","Conta salva com êxito!");
		} catch (Exception e) {
			msgRetornoGeral("frmIndex","Não foi possível realizar ação: Salvar!");
			e.printStackTrace();
		}
		populaListaContas();
	}
	
	public  void  populaListaContas(){
		 List<Conta> contas = daoOrca.listaContas();
		 System.out.println("Total contas: "+ contas.size());
		this.tela.setContas(contas);
	}
	
	public void excluir(Conta conta){
		int resp = daoOrca.emUsoConta(conta);
		if (resp == 0) {
		
		try {
			daoOrca.excluiConta(conta);
			msgRetornoGeral("frmIndex","Conta excluída com êxito!");
			this.tela.setVisibilidadeButton(false);
			this.tela.setConta(new Conta());
		} catch (Exception e) {
			msgRetornoGeral("frmIndex","Não foi possível realizar ação: Excluir!");
			e.printStackTrace();
		}
		}else{
			msgRetornoGeral("frmIndex",
					"Não foi possível excluir a conta: " + conta.getDescricao()
					+ " pois a mesma já esta sendo usada "+resp+" vez(es)");
		
		}
		populaListaContas();
		
		
	}
	
	public String montaTelaInicial(){
		this.tela.setVisibilidadeButton(false);
		this.tela.setConta(new Conta());
		populaListaContas();
		return pt.chamaConta();
	}
	
	public void montaTelaEditar(Conta conta){
		this.tela.setVisibilidadeButton(true);
		this.tela.setConta(conta);
	}
	
	public void alteraConta(){
		Conta conta = this.tela.getConta();
		try {
			daoOrca.atualizar(conta);
			this.tela.setVisibilidadeButton(false);
			this.tela.setConta(new Conta());
			msgRetornoGeral("frmIndex","Conta alterada com êxito!");
		} catch (Exception e) {
			msgRetornoGeral("frmIndex","Não foi possível realizar ação: Alterar!");
			e.printStackTrace();
		}
		populaListaContas();
		
	}
	

	public ViewConta getTela() {
		return tela;
	}

	public void setTela(ViewConta tela) {
		this.tela = tela;
	}

	// ############################ MENSAGENS #############################
	public void msgRetornoGeral(String idComp, String msg) {
		mb.addMessageSemBundle(msg, idComp, FacesMessage.SEVERITY_WARN);
	}

}